1 Data Preparation

library(arules)

a

trans <- read.transactions('data.csv', , format = 'basket', sep=',')

b

dim (trans)
## [1] 7501  119

Wir haben 7501 transaction data und 119 distinct items.

c

itemLabels(trans)
##   [1] "almonds"              "antioxydant juice"    "asparagus"           
##   [4] "avocado"              "babies food"          "bacon"               
##   [7] "barbecue sauce"       "black tea"            "blueberries"         
##  [10] "body spray"           "bramble"              "brownies"            
##  [13] "bug spray"            "burger sauce"         "burgers"             
##  [16] "butter"               "cake"                 "candy bars"          
##  [19] "carrots"              "cauliflower"          "cereals"             
##  [22] "champagne"            "chicken"              "chili"               
##  [25] "chocolate"            "chocolate bread"      "chutney"             
##  [28] "cider"                "clothes accessories"  "cookies"             
##  [31] "cooking oil"          "corn"                 "cottage cheese"      
##  [34] "cream"                "dessert wine"         "eggplant"            
##  [37] "eggs"                 "energy bar"           "energy drink"        
##  [40] "escalope"             "extra dark chocolate" "flax seed"           
##  [43] "french fries"         "french wine"          "fresh bread"         
##  [46] "fresh tuna"           "fromage blanc"        "frozen smoothie"     
##  [49] "frozen vegetables"    "gluten free bar"      "grated cheese"       
##  [52] "green beans"          "green grapes"         "green tea"           
##  [55] "ground beef"          "gums"                 "ham"                 
##  [58] "hand protein bar"     "herb & pepper"        "honey"               
##  [61] "hot dogs"             "ketchup"              "light cream"         
##  [64] "light mayo"           "low fat yogurt"       "magazines"           
##  [67] "mashed potato"        "mayonnaise"           "meatballs"           
##  [70] "melons"               "milk"                 "mineral water"       
##  [73] "mint"                 "mint green tea"       "muffins"             
##  [76] "mushroom cream sauce" "napkins"              "nonfat milk"         
##  [79] "oatmeal"              "oil"                  "olive oil"           
##  [82] "pancakes"             "parmesan cheese"      "pasta"               
##  [85] "pepper"               "pet food"             "pickles"             
##  [88] "protein bar"          "red wine"             "rice"                
##  [91] "salad"                "salmon"               "salt"                
##  [94] "sandwich"             "shallot"              "shampoo"             
##  [97] "shrimp"               "soda"                 "soup"                
## [100] "spaghetti"            "sparkling water"      "spinach"             
## [103] "strawberries"         "strong cheese"        "tea"                 
## [106] "tomato juice"         "tomato sauce"         "tomatoes"            
## [109] "toothpaste"           "turkey"               "vegetables mix"      
## [112] "water spray"          "white wine"           "whole weat flour"    
## [115] "whole wheat pasta"    "whole wheat rice"     "yams"                
## [118] "yogurt cake"          "zucchini"

d

summary(trans)
## transactions as itemMatrix in sparse format with
##  7501 rows (elements/itemsets/transactions) and
##  119 columns (items) and a density of 0.03288973 
## 
## most frequent items:
## mineral water          eggs     spaghetti  french fries     chocolate 
##          1788          1348          1306          1282          1229 
##       (Other) 
##         22405 
## 
## element (itemset/transaction) length distribution:
## sizes
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 1754 1358 1044  816  667  493  391  324  259  139  102   67   40   22   17    4 
##   18   19   20 
##    1    2    1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   3.914   5.000  20.000 
## 
## includes extended item information - examples:
##              labels
## 1           almonds
## 2 antioxydant juice
## 3         asparagus

###1 Density: 0.03288973 -> 3,2% Gibt den Prozentsatz an, wie viele nicht-Null Zellen in der Matrix vorhanden sind. ###2 Set mit 1 Item in 1754 Transactions. Dies Bedeutet dass 1754 Transaktionen lediglich 1 Artikel beinhaltet. ###3 Auch Oberes Quartil genannt. Zeigt wie die ersten 75% der Daten abschneiden. In den ersten 75% der Daten wurden in 667 Transaktionen ein Itemset von 5 Produkten gekauft

e

itemFrequencyPlot(trans, topN=3,  cex.names=1)

Eier und Spaghetti haben eine ähnliche “relative item frequency” mit ca. 17% während es bei Mineralwasser bei mehr als 20% liegt.

A-Priori Algorithm

library(arulesViz)

a

rules <- apriori(trans, 
                 parameter = list(supp=0.01, conf=0.2,
                                  maxlen=10,
                                  target= "rules"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.2    0.1    1 none FALSE            TRUE       5    0.01      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 75 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[119 item(s), 7501 transaction(s)] done [0.00s].
## sorting and recoding items ... [75 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [164 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
summary(rules)
## set of 164 rules
## 
## rule length distribution (lhs + rhs):sizes
##   1   2   3 
##   1 116  47 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    2.00    2.00    2.28    3.00    3.00 
## 
## summary of quality measures:
##     support          confidence        coverage            lift       
##  Min.   :0.01013   Min.   :0.2000   Min.   :0.02000   Min.   :0.9025  
##  1st Qu.:0.01293   1st Qu.:0.2285   1st Qu.:0.04786   1st Qu.:1.3483  
##  Median :0.01646   Median :0.2654   Median :0.05999   Median :1.5718  
##  Mean   :0.02143   Mean   :0.2878   Mean   :0.08108   Mean   :1.6333  
##  3rd Qu.:0.02306   3rd Qu.:0.3310   3rd Qu.:0.09505   3rd Qu.:1.8436  
##  Max.   :0.23837   Max.   :0.5067   Max.   :1.00000   Max.   :3.2920  
##      count       
##  Min.   :  76.0  
##  1st Qu.:  97.0  
##  Median : 123.5  
##  Mean   : 160.7  
##  3rd Qu.: 173.0  
##  Max.   :1788.0  
## 
## mining info:
##   data ntransactions support confidence
##  trans          7501    0.01        0.2

##b Support: Wie beliebt ist eine Menge von Elementen, gemessen am Anteil der Transaktionen, in denen das Itemset erscheint. Es lässt sich berechnen indem man die Häufigkeit von A durch die Anzahl aller Transaktionen teilt. Normalerweise wird dabei noch ein Schwellenwert gesetzt, um die Anzahl der zu analysierenden Itemsets zu verringern.

Confidence: Wie wahrscheinlich ist es, dass Produkt B gekauft wird wenn Produkt A gekauft wurde. Es wird berechnet indem man support(A∪B) durch den support(A) teilt. Confidence gibt jedoch nur an, wie beliebt das Produkt A ist, nicht jedoch Produkt B. Wenn jedoch Produkt A sehr beliebt ist (confidence hoch) ist es wahrscheinlicher, dass Produkt B ebenfalls im Warenkorb landet.

##c 1. set of rules: 164 2. 1, 116, 47 3. Median :0.01646, Median :0.2654, Median :1.5718

##d Lift:
Wie wahrscheinlich ist es, dass Artikel B gekauft wird, wenn Artikel A gekauft wird. Gleichzeitig wird gemessen, wie beliebt Artikel A und B sind -> es wird gemessen, wie oft A und B häufiger zusammen auftreten als erwartet, wenn sie statistisch unabhängig sind. Lift wird berechtnet indem man support(A∪B) durch support(A)×support(B) teilt. Bei Lift gibt es 3 verschieden Szenarien: lift=1: keine Assoziationen lift<1:B wird wahrscheinlich nicht gekauft wenn A gekauft wurde lift>1:B wird wahrscheinlich gekauft wenn A gekauft wurde

e

water_rules_rhs <- apriori(trans, 
                          parameter = list(supp=0.01, conf=0.5, 
                                         maxlen=10, 
                                         minlen=2),
                          appearance = list(default="lhs", rhs="mineral water"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5    0.01      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 75 
## 
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[119 item(s), 7501 transaction(s)] done [0.00s].
## sorting and recoding items ... [75 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [2 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

f

inspect(water_rules_rhs)
##     lhs                   rhs             support    confidence coverage  
## [1] {ground beef,milk} => {mineral water} 0.01106519 0.5030303  0.02199707
## [2] {eggs,ground beef} => {mineral water} 0.01013198 0.5066667  0.01999733
##     lift     count
## [1] 2.110308 83   
## [2] 2.125563 76

LHS: Erst Hackfleisch und dann Milch bei der ersten Regel und bei der zweiten erst Eier und dann Hackfleisch RHS: Beides mal Mineralwasser Support: 1,1% der Kunden haben entweder nach einem Einkauf von Hackfleisch und milch oder Eier und Hackfleisch Mineralwasser gekauft Confidence: Beide Regeln treten mit einer wahrscheinlichkeit von 50% ein. Die zweite Regel ein bisschen wahrscheinlicher als die Erste Lift: liegt beides mal bei >1 sodass beides mal es ehr wahrscheinlich ist, dass nach dem kauf von Hackfleisch und milch oder Eier und Hackfleisch mineralwasser gekauft wird

g

Coverage: ist ein Faktor, wie oft die Regel auf der Linken Seite (LHS) der allgemeinen Regel angewendet werden kann 2,2% rule 1 2,0% rule 2

h

eggs_rules_lhs <- apriori(trans, 
                          parameter = list(supp=0.01, conf=0.2, 
                                         maxlen=10, 
                                         minlen=2),
                          appearance = list(default="rhs", lhs="eggs"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.2    0.1    1 none FALSE            TRUE       5    0.01      2
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 75 
## 
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[119 item(s), 7501 transaction(s)] done [0.00s].
## sorting and recoding items ... [75 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 done [0.00s].
## writing ... [3 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

i

inspect(eggs_rules_lhs)
##     lhs       rhs             support    confidence coverage  lift     count
## [1] {eggs} => {french fries}  0.03639515 0.2025223  0.1797094 1.184961 273  
## [2] {eggs} => {spaghetti}     0.03652846 0.2032641  0.1797094 1.167446 274  
## [3] {eggs} => {mineral water} 0.05092654 0.2833828  0.1797094 1.188845 382

erst eier und dann Pommes support:0.03639515 die Regel haben 3,6% der Kunden eingehalten confidence: 0.2025223 die Regel tritt mit einer wahrscheinlichekti von 20% ein coverage: 0.1797094 17% der Kunden kaufen eier lift: 1.184961 liegt >1 sodass es wahrscheinlich ist dass es zusammen gekauft wird

##j Damit man mehr Pommes nach Eiern kauft könne man die Eier strategisch neben den Tiefkühlprodukten lagern und die Pommes in der Tiefkühltruhe nahe an den Eiern platzieren. So fällt den Kunden eher ein, dass sie wenn sie Eier kaufen auch noch Pommes brauchen könnten Man könnte neben den Eiern eine Rezeptempfehlung für z.B. Spaghetti Carbonara aufhängen. So könnten die Kunden darauf Lust bekommen und kaufen nachdem sie Eier genommen haben noch Spaghetti dazu. Man könnte einen Wasserspender (wie bei DM) neben die Eier platzieren, sodass den Kunden auffällt dass sie noch Mineralwasser kaufen müssen. Wenn der Kunde das Produkt sieht, fällt ihm oft ein, was er noch braucht auch wenn es nicht auf seiner Liste steht.

3 Visualizing association rules

3.1

a

plot(rules, engine = "plotly")

###b 1){} ->{mineral water} 2){eggs, ground beef}->{mineral water} 3){herb & pepper}->{ground beef}

3.2

a

subrules <- head(rules, n = 5, by = "lift")

plot(subrules, method = "graph",  engine = "htmlwidget")

###b {herb & pepper}->{ground beef} Die stärkste Regel besitzt einen Support von 1,6% und eine Confidence von 32,3%. LIft liegt bei 3.29 und ist somit größer als 1 und bestätigt die Wahrscheinlichkeit der Regel. support = 0.016 confidence = 0.323 coverage = 0.0495 lift = 3.29 count = 120 order = 2

{mineral water, spaghetti}->{ground beef} Die zweitstärkste Regel besitzt einen Support von 1,7% und eine Confidence von 5,9%. Lift liegt bei 2,91 und ist somit ebenfalls größer als 1 und bestätigt die Wahrscheinlichkeit der Regel. support = 0.0171 confidence = 0.286 coverage = 0.0597 lift = 2.91 count = 128 order = 3

3.3

a

plot(subrules, method="paracoord")

###b {herb & pepper}->{ground beef} {mineral water, spaghetti}->{ground beef} Man kann wenig ablesen, auser in welcher Reihenfolge die LHS in den Warenkorb kommen, bevor RHS dazu kommt. Man erkennt ledgiglich an der Farbe, welche Regeln die stärksten sind.